package com.cskaoyan.javase.homework.primary._3oop1;

/**
 * 设计一个员工类(Staff)，要求该类：
 *      属性: 姓名,性别,工号,工资
 *      构造器:
 *      姓名的单参构造器、姓名和性别的双参构造器、姓名、性别和工资的三参构造器
 * 其中员工的工号要求(每一位员工都必须有工号):
 *      第一个员工对象的工号是10001
 *      第二个员工对象的工号是10002
 *      第三个员工对象的工号是10003
 *      ....
 * 现在每位员工都要缴纳一个固定额的公积金（比如2000），要求在员工类中设计一个方法求员工的到手工资。（除了扣除这个固定额度的公积金，不考虑诸如扣税等其余问题）
 *
 * 最后再定义一个方法用于打印员工对象的各种属性取值，其中在打印工资时，要打印实际到手工资。
 *
 * 将该类定义完毕后，尝试创建对象，测试一下代码。
 *
 * @since 10:35
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class BlockDemo {
    public static void main(String[] args) {
        Staff s1 = new Staff("张三");
        s1.printStaff();

        Staff s2 = new Staff("李四", "女");
        s2.printStaff();

        Staff s3 = new Staff("王二", "男", 10000);
        s3.printStaff();
    }
}

class Staff {
    String name;
    String gender;
    int id;
    double salary;

    static double accumulationFundQuota = 2000;
    static int initId = 10001;

    // 由于id是每个构造器都需要赋值的，所以放在构造代码块中完成
    {
        id = initId++;
    }

    // 构造器
    public Staff(String name) {
        this.name = name;
    }

    public Staff(String name, String gender) {
        this(name);
        this.gender = gender;
    }

    public Staff(String name, String gender, double salary) {
        this(name, gender);
        this.salary = salary;
    }

    public double calcSalary() {
        return salary - accumulationFundQuota;
    }

    public void printStaff() {
        System.out.println("Staff{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", id=" + id +
                ", salary=" + calcSalary() +
                '}');
    }
}